package Day_0225.Tomcat;

/**
 * @author zxc
 * @date 2023/02/25 21:04
 **/
public class Tomcat_Connector {
    public static void main(String[] args) {
        /**
         * 了解Tomcat Connector的三种运行模式
         * ===》
         * 1.BIO ：（Blocking IO）
         * ===》同步并阻塞 一个线程处理一个请求。
         * （1）缺点：并发量高时，线程数较多，浪费资源。
         * （2）Tomcat7或以下，在Linux系统中默认使用这种方式。
         *  配制项：protocol=”HTTP/1.1”
         *
         * 2.NIO：同步非阻塞IO（No Blocking IO）
         * ===》
         * （1）利用Java的异步IO处理，可以通过少量线程，来处理大量的请求，可以复用同一个线程，处理多个connection(多路复用)。
         * （2）Tomcat8 在Linux系统中默认使用这种方式 ; Tomcat7必须修改Connector配置来启动。
         *  配制项：protocol=”org.apache.coyote.http11.Http11NioProtocol”
         *  备注：我们常用的Jetty，Mina，ZooKeeper等都是基于java nio实现.
         *
         * 3.APR：即Apache Portable Runtime，从操作系统层面解决io阻塞问题。
         * ===》
         * AIO方式，异步非阻塞IO(Java NIO2又叫AIO)
         * （1）主要与NIO的区别主要是操作系统的底层区别.可以做个比喻:
         * （2）NIO ：
         *  比作快递，NIO就是网购后要自己到官网查下快递是否已经到了(可能是多次)，然后自己去取快递;
         *  ===》
         *  即，当前线程若是未能获取到资源去执行IO操作的话，不会阻塞，会选择直接返回;
         *  等待操作系统准备好IO资源，通知当前线程去执行IO操作;
         *
         * （3）AIO ：
         *  AIO就是快递员送货上门了(不用关注快递进度)。
         *  ===>
         *  即，当前线程若是未能获取到资源去执行IO操作的话，不会阻塞，会选择直接返回;
         *  等待操作系统执行完当前IO操作后，通知当前线程该IO操作已经执行完毕;
         *
         *  配制项：protocol=”org.apache.coyote.http11.Http11AprProtocol”
         *  备注：需在本地服务器安装APR库。Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式。
         *  Linux如果安装了apr和native，Tomcat直接启动就支持apr。
         */
    }
}
